
//导入明文密码处理
const bcrypt = require('bcryptjs')

//用这个包生成Token字符创
const jwt = require('jsonwebtoken')

//注册处理函数
const db = require("../db/index.js")
exports.regUser = (req,res) =>{
  const userinfo = req.body
  if(!userinfo.username || !userinfo.password){
    return res.send({
      status: 1,
      message:'用户名或密码不合法！'
    })
  }
  const sql = 'select * from ev_user where username = ?'

  db.query(sql,[userinfo.username], function(err,results){
    if(err){
      // return res.send({
      //   status:1,
      //   message:err
      // })
      return res.cc(err)
    }

    if(results.length > 0){
      // return res.send({
      //   status:1,
      //   message: '用户被占用，请更换其他用户名！'
      // })

      return res.cc('用户被占用，请更换其他用户名！')
    }
    const sql = 'insert into ev_users set ?'
    userinfo.password = bcrypt.hashSync(userinfo.password,10)

    db.query(sql,{username:userinfo.username,password:userinfo.password},(err,results)=>{
      if(err){
        // return res.send({
        //   status:1,
        //   message:err.message,
        // })
        return res.cc(err)
      }
      if(results.affectedRows !==1){
        // return res.send({
        //   status:1,
        //   message:'注册用户失败，请重新注册'
        // })

        return res.cc('注册用户失败，请重新注册')
      }

      res.send({
        status:0,
        message:'注册成功'
      })
    })
  })

  res.send('reguser Ok')
}

//登录处理函数
exports.login  = (req,res) =>{

  const userinfo = req.body

  const sql = 'select * from ev_users where username = ?'

  db.query(sql, userinfo.username, function (err,results){
    //执行 SQL 语句失败
    if(err){
      return res.cc(err)
    }
    //执行 SQL语句成功， 但是查询到数据条数不等1
    if(results.length!==1){
      return res.cc('登录失败！')
    }
    //TODO:判断用户输入的登录密码是否和数据库中的密码一致
    //拿着用户输入的密码和数据库中存储的密码进行对比

    const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)

    //如果对比的结果等于 false, 则证明用户输入的密码错误
    if(!compareResult){
      return res.cc('登录错误')
    }

    //TODO：登录成功，生成Token字符串

    //剔除完毕之后，user中只保留了用户的id, username,nickname,email 这四个属性的值
    const user = {...results[0],password:'',user_pic:''}
    //导入配置文件
    const config = require('../config')
    //生成Token字符串
    const tikenStr = jwt.sign(user,config.jwtSecretKey,{
      expiresIn:'10h',//token有效期为10个小时
    })

  })
  res.send({
    status:0,
    message:'登录成功',
    token:'Bearer '+tikenStr,
  })
}